import Joi from 'joi';
import resFn from '@/app/api/util/res'
import { NextRequest, NextResponse } from 'next/server';
import { logError, logSpecial } from '@/app/api/util/io/log';
import { getBody, getFormData, getQuery, judge, permissionJudge } from '@/app/api/util/res/handle';
import { ResCode, RejectData } from '@/app/api/util/res/code';
import { stringJoi } from '@/app/api/util/Joi';
import { writeBase64File, writeFile } from '@/app/api/util/io';
import 'server-only'
import { jwtConfig } from '@/app/api/util/config';
export const dynamic = 'force-dynamic';

/**上传文件保存到服务器 （仅限本地调试时使用，前端不可使用） 请求参数 /api/file/localUpload */
export interface LocalUploadReq {
    /**要保存到服务器上的路径，包含文件名和后缀 */
    fullPath: string,
    /**上传身份的校验，用JWT的密匙吧 */
    secret: string
}
/**上传文件保存到服务器 （仅限本地调试时使用，不在前端使用） 接口*/
export async function POST(request: NextRequest) {
    try {
        logSpecial('接受到啦')
        const { fullPath, secret } = await judge(getQuery<LocalUploadReq>(request), { fullPath: stringJoi(), secret: stringJoi() })
        if (request.headers.get('Authorization') || secret !== jwtConfig.secret) throw new RejectData(ResCode.UNAUTHORIZED, "禁止使用")
        const [file] = await getFormData(request)
        const filePath = await writeFile(decodeURIComponent(fullPath), file[0])
        logSpecial('存好了', filePath)
        return NextResponse.json(filePath, { status: 200 });
    } catch (error: any) {
        logError('上传文件保存到服务器 （仅限本地调试时使用，前端不可使用） 接口', error)
        return NextResponse.json(error, { status: 500 });
    }
}
